/*
 * @description 获取文件的缓存路径，如果文件未缓存，则直接返回网络路径，并下载缓存
 * @method getImageCache
 * @param {String} filePath 完整的图片下载路径，如果没有从缓存中获取到，则用这个路径去下载
 * @param {String} fileMd5 文件md5，必须唯一
 * @return {Object} promise对象
 */
export const getImageCache = function(filePath, fileMd5) {
	return new Promise((resolve, reject) => {
		if(!filePath && !fileMd5){
			resolve('')
		}
		// 图片缓存key值
		let storageKey = 'IMAGE_CACHE_INFO_' + (fileMd5 || filePath)
		// 首先获取本地存储的数据，查询是否有对应文件路径，如果有缓存内容，直接返回
		const cacheFileInfo = uni.getStorageSync(storageKey)
		if (cacheFileInfo) {
			uni.showToast({
				title: '使用缓存'
			})
			resolve(cacheFileInfo)
			return;
		} else {
			
			console.log("未缓存,进行下载保存:" + filePath)
			// #ifdef APP
			// 如果没有，执行下载，并存储起来后
			uni.downloadFile({
				url: filePath,
				success: (res) => {
					if (res.statusCode === 200) {
						console.log('下载成功');
						
						// 再进行本地保存
						uni.saveFile({
							tempFilePath: res.tempFilePath,
							success: function(res2) {
								console.log(res2.savedFilePath)
								uni.showToast({
									title: '缓存成功'
								})
								uni.setStorageSync(storageKey, res2.savedFilePath)
								resolve(res2.savedFilePath)
							},
							fail: function(res2) {
								reject(res2)
							}
						})
					} else {
						console.log('下载临时文件失败')
						reject(res)
					}
				},
				fail: (res) => {
					console.log(res)
					reject(res)
				}
			})
			// #endif
			// #ifdef H5
			// 不存储
			resolve(filePath)
			// urlToBase64(filePath).then((base64)=>{
			// 	if(base64){
			// 		uni.setStorageSync(storageKey, base64)
			// 	}
			// 	resolve(base64)
			// }).catch(err=>{
			// 	console.error(err)
			// 	reject(err);
			// })
			// #endif
			
		}
	})
}

function urlToBase64(url) {
  return new Promise((resolve, reject) => {
    let image = new Image();
 
    image.onload = function () {
      let canvas = document.createElement("canvas");
      canvas.width = this.naturalWidth;
      canvas.height = this.naturalHeight;
 
      // 将图片插入画布并开始绘制
      canvas.getContext("2d").drawImage(image, 0, 0);
 
      // result
      let result = canvas.toDataURL("image/*");
 
      resolve(result);
    };
 
    // CORS 策略，会存在跨域问题https://stackoverflow.com/questions/20424279/canvas-todataurl-securityerror
 
    image.setAttribute("crossOrigin", "Anonymous");
    image.src = url;
 
    // 图片加载失败的错误处理
    image.onerror = (e) => {
		console.log(e);
      reject(new Error("urlToBase64 error"));
    };
  });
}